<?php 
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                            DMI Alta ADMINISTRATION									//
//																										//
//   08/01/11 (Filament) : création de la page															//
//   03/02/11 (Filament) : modification du script php, celui est désormais multipages pour le formulaire//
//   24/02/11 (Filament) : modification pour compléter la gestion des auteurs							//
//	 29/12/11 (Filament) : ajout de la gestion des vignettes
//																										//
//	Cette page permet de gérer les dossiers de DMI														//
//																										//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
*
* @package dmi
* @version $Id: acp_permissions.php,v 1.59 2007/07/19 20:36:49 acydburn Exp $
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* @package dmi
*/
include($phpbb_root_path . 'includes/class_dossiers.' . $phpEx);

class dmi_dossiers
{
	var $u_action;
	var $permission_dropdown;
	function main($id, $mode)
	{
		global $db, $user, $auth, $template, $cache;
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;

		//Valeur par défaut pour le template et les langues :
		$user->add_lang('dmi/general');
		add_permission_language();	

		//On prend le mode courant
		$mode = (isset($_GET['mode']) && $_GET['mode'] != "") ? $_GET['mode'] : "";

		//On prend l'action courante :
		$action = (isset($_GET['action']) && $_GET['action'] !=  "") ? $_GET['action'] : null;

		//Si on fait de l'ajout uniquement :
		if($mode == 'ajout' || $action == 'ajout' || $action == 'ajout_auteur' || $action == 'supp_auteur') {
			//Les étapes du formulaire :
			$forms = array( // Voici la liste des formulaires
				1 => 'Informations du dossier',
				2 => 'Ajout de texte',
				3 => 'Vignettes',
				4 => 'Finalisation',
				5 => 'Felicitations'
			);

			//Initialisation de la valeur, c'est elle qui nous permet de passer au formulaire suivant si tout va bien 				//ou de rester où on est si on a une erreur
			$next_etape = 1;

			//Initialisation du tableau des erreurs :
			$erreurs = array();

			//Initialisation du tableau des infos :
			$infos_membre = array();

			//Le découpage par page du script suivant est inspiré de :
			//http://g-rossolini.developpez.com/tutoriels/php/formulaires/?page=multipages

			// Récupération du numéro de l'étape en cours
			if(empty($_GET['stage']) or !is_numeric($_GET['stage']))
			{
				    define('CFG_STAGE_ID', 1);
			}
			else
			{
				if(array_key_exists($_GET['stage'], $forms))
					define('CFG_STAGE_ID', intval($_GET['stage']));
				else
					define('CFG_STAGE_ID', 1);
			}
		}

		//Si on a des actions à faire c'est maintenant
		if($action != null)
		{
			switch($action)
			{
				case "ajout" :
					// Déclaration de la variable de session
					if(empty($_SESSION['forms']))
					{
					    $user->data['forms'] = array();
					}

					switch(CFG_STAGE_ID)
					{
					    case 4:
							//On a juste besoin du dossier :
							$dossier = new Dossier($_POST['dossier_id']);
						    break;
					    
					    case 3:
					    	//Commençons par prendre le dossier :
					    	$dossier = new Dossier($_POST['dossier_id']);
					    	
					    	//Est ce que j'ai bien une image qui a été mise ?
					    	if(!empty($_POST['w']))
					    	{
					    		$targ_w = $targ_h = 150;
								$jpeg_quality = 90;
							
								$fichier = '../images/dossiers/temp/'.$_POST['fileURL'];
								if(strpos($fichier, '.png') || strpos($fichier,'.PNG'))
									$img_r = ImageCreateFromPng($fichier);
								elseif (strpos($fichier, '.jpg') || strpos($fichier, '.jpeg') || strpos($fichier, '.JPG') || strpos($fichier.'JPEG'))
									$img_r = ImageCreateFromJpeg($fichier);
								elseif (strpos($fichier, '.gif') || strpos($fichier, '.GIF'))
									$img_r = ImageCreateFromGif($fichier);
								$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
							
								imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
								$targ_w,$targ_h,$_POST['w'],$_POST['h']);
							
								if(imagejpeg($dst_r,'../images/dossiers/vignettes/'.$dossier->getId().'.jpg',$jpeg_quality))
								{
							    	//Cool j'ai une vignette, donc je veux en sauver une :
							    	$dossier->setVignette($dossier->getId().'.jpg');
						    		$next_etape = 4;
								}
								else 
								{
									$next_etape = 3;
								}
					    	}
					    	else
					    		$next_etape = 3;
					    	break;

					    case 2:
							//On vérifie en php cette fois les informations :
							$test = true;
							if(!empty($_POST['postid']) && is_numeric($_POST['postid']))
								; //Ok il y'a bien une valeur pour le postId et c'est un nombretexte
							else {
								$test = false;
								$erreurs[] = 'Il doit y avoir une valeur pour le post id et c\'est obligatoirement un nombre.';
							}
	
							if(!empty($_POST['texte']))
								; //Ok il y'a bien une valeur pour le texte
							else {
								$test = false;
								$erreurs[] = 'Il doit y avoir une valeur pour le texte.';
							}
	
							//Ok les tests côté serveur sont passés, on stocke les valeurs :
							if($test == true) {
								//On traite les informations du dossier :
	
								//Histoire d'ajouter dans le bon dossier, récupérons le dossier :
								$dossier = new Dossier($_POST['dossier_id']);
	
								//On stocke les infos qu'on modifiera par la suite
								$datas = array(
									'post_id' => $_POST['postid'],
									'post_text' => $_POST['texte'], //pas de sql_escape, la class s'en 													//chargera
								);
	
								//Tout va bien on passe à l'étape suivante
								if(!empty($_POST['Finaliser']) && $_POST['Finaliser'] == 'fini') {
									//Et on va en étape 3
									$next_etape = 3;
								}
								else
									$next_etape = 2; //Couvre le cas ou l'on ajoute un post de plus
	
								//Quoi qu'il en soit on ajoute le emssage dans la bdd, des modifs seront 								//possibles en étape 3
								$infos_bbcode = "SELECT bbcode_bitfield, bbcode_uid, poster_id
										FROM ".POSTS_TABLE."
										WHERE post_id = '".$_POST['postid']."'
										LIMIT 0,1";
								$result = $db->sql_query($infos_bbcode);
								$result_data = $db->sql_fetchrow($result);
								$db->sql_freeresult($result);
	
								//On modifie le tableau data, en ajoutant la gesiton des bbcodes
								$datas['bbcode_bitfield'] = $result_data['bbcode_bitfield'];
								$datas['bbcode_uid'] = $result_data['bbcode_uid'];
								$datas['poster_id'] = $result_data['poster_id'];
	
								//Et on ajoute le texte au dossier :
								$dossier->addPost($datas);
	
								//Oui on souffre un peu pour créer data, mais après le addPost est 								//simplissme
							} else {
								//On récupère les informations sur le dossier, nécessaires par al suite :
								$dossier = new Dossier($_POST['dossier_id']);
	
								//On garde les infos pour ne pas avoir à tout retaper en cas d'erreur
								//Bordel ce qu'il faut pas faire pour être boulet proof !
								$infos_dossier['forms'][CFG_STAGE_ID] = array(
										'post_id' => $_POST['postid'],
										'post_text' => $_POST['texte'],
								);
								
								//Est ce que la personne s'est trompée, et doit finir sans rien ajouter ?
								if(!empty($_POST['Finaliser']) && $_POST['Finaliser'] == 'fini') {
									//Et on va en étape 3
									$next_etape = 3;
								}
								else {
									//Erreur ! je reste sur place
									$next_etape = 2;
								}
							}
						    break;

					    case 1:
					    default:
							//On vérifie en php cette fois les informations :
							$test = true;
							if(!empty($_POST['titre']) && strlen($_POST['titre']) < 256)
								; //Ok il y'a bien une valeur pour le titre
							else {
								$test = false;
								$erreurs[] = 'Il doit y avoir une valeur pour le titre et il ne doit pas faire plus de 255 charact&egrave;res.';
							}
	
							if(!empty($_POST['chapeau']))
								; //Ok il y'a bien une valeur pour le chapeau
							else {
								$test = false;
								$erreurs[] = 'Il doit y avoir une valeur pour le chapeau.';
							}
	
							if(!empty($_POST['categorie']) && $_POST['categorie'] != 'null')
								; //Ok il y'a bien une valeur pour le select
							else {
								$test = false;
								$erreurs[] = 'La valeur s&eacute;lectionn&eacute;e pour le select n\'est pas valide, choisissez en une autre.';
							}
	
							//Ok les tests côté serveur sont passés, on stocke les valeurs :
							if($test == true) {
								//J'ai les infos sur le dossier, alors je le crée
								$dossier = new Dossier($_POST['titre'],$_POST['chapeau'], $_POST['categorie'], $_POST['template'], $_POST['style']);
	
								//Tout va bien on passe à l'étape suivante
								$next_etape = 2;
							} else {
								//On récupère les informations sur le dossier, nécessaires par al suite :
								$dossier = new Dossier($_POST['dossier_id']);
	
								//On stocke ça : 
								$infos_dossier['forms'][CFG_STAGE_ID] = array(
									'titre'	=> $_POST['titre'], //Pour ne pas retaper les infos
									'chapeau' =>	$_POST['chapeau'],
									'categorie' => $_POST['categorie']
								);
								//Erreur ! je reste sur place
								$next_etape = 1;
							}
						    break;
					}
					break;
				case "up" :
					$dossier = new Dossier($_GET['dossier']);
					$dossier->moveUpPost($_GET['post']);
					$next_etape = 4;
					break;
				case "down" :
					$dossier = new Dossier($_GET['dossier']);
					$dossier->moveDownPost($_GET['post']);
					$next_etape = 4;
					break;
				case "supp_auteur" : 
					//On vérifie qu'on a bien un auteur spécifié :
					if(isset($_GET['auteur']) && !empty($_GET['auteur'])) {
						//Primo le dossier :
						$dossier = new Dossier($_GET['dossier']);

						//Et on supprime l'auteur :
						$dossier->removeAuteur($_GET['auteur']);

						//On confirme :
						$infos_membre[] = "Auteur supprim&eacute;";
					} else
						//Traitement de l'erreur
					break;
				case "ajout_auteur" :
					//Le dossier :
					$dossier = new Dossier($_GET['dossier']);

					//Et on ajoute l'auteur :
					$dossier->ajoutAuteur($_POST['username'], $erreurs);

					//Et maintenant on fait quoi ?
					if(isset($_POST['add_auteur']) && !empty($_POST['add_auteur']) && $_POST['add_auteur'] == 'Fini')
						$mode = 'edit';
					//Si c'est fini on retourne au mode d'édition
					break;
			}
		}

		//On couvre le cas ou edit a été choisi alors qu'aucun dossier n'est sélectionné
		if($mode == 'edit') {
			if(!isset($_GET['dossier']) || empty($_GET['dossier']))
				$mode = "voir";
		}

		switch($mode)
		{
			case 'edit' :
				//L'étape que le template devra afficher est la 4 :
				$next_etape = 4;

				if(isset($_GET['dossier']) && !empty($_GET['dossier'])) {
					//Et les informations sur le dossier :
					$dossier = new Dossier($_GET['dossier']);
				} else {
					$next_etape = 1;
					$erreurs[] = 'Aucun dossier n\'a été sélectionné.';

					break;
				}
				//Normal qu'il n'y ait pas de break
			case "ajout" :
				//Pour le cas où on ajoute un texte après coup !
				if(isset($_GET['dossier']) && !empty($_GET['dossier']) && isset($_GET['stage']) && $_GET['stage'] == 2) {
					$next_etape = 2;
					$dossier = new Dossier($_GET['dossier']);
				}

				//Ici il convient de traiter les différentes étapes de l'ajout puisque le formulaire est
				// sur plusieurs pages
				switch($next_etape) {
					case 4 :
						//On affiche le troisième formulaire :
						$this->tpl_name = 'dossiers/ajout3';
						
						//Et ici on change complètement de logique !

						//Listons les différents textes de ce dossier :
						$textes = $dossier->getPosts();
						foreach($textes as $texte) {
							//Bon alors déjà on ne garde que les 100 premiers caractère de chaque texte :
							//Repompé de : http://www.phpsources.org/scripts104-PHP.htm
							$max=100;
							if(strlen($texte['texte'])>=$max)
							{
								// Met la portion de chaine dans $chaine
								$texte['texte']=substr($texte['texte'],0,$max); 
								// position du dernier espace
								$espace=strrpos($texte['texte']," "); 
								// test si il ya un espace
								if($espace)
									// si ya 1 espace, coupe de nouveau la chaine
									$texte['texte']=substr($texte['texte'],0,$espace);
								// Ajoute ... à la chaine
								$texte['texte'] .= '...';
							}

							//Et on envoie ça au template
							$template->assign_block_vars('textes', array(
								"POST_ID" => $texte['post_id'],
								"TEXTE" => $texte['texte']
							));
						}

						//Liste des auteurs : 
						$auteurs = $dossier->getAuteurs();

						foreach($auteurs as $data) {
							$template->assign_block_vars('auteurs', array(
								'AUTEUR_ID' => $data['user_id'],
								'AUTEUR_NAME' => $data['username']
							));
						}

						//Une autre information utile pour le template :
						$template->assign_var('DOSSIER_ID', $dossier->getId());
						
						break;
					case 3 :
						//On affiche le troisième formulaire :
						$this->tpl_name = 'dossiers/ajout4';

						//Informations complémentaires pour le template :
						$template->assign_vars(array(
							"LINK"	=> append_sid('index.php?i=dossiers&mode=ajout_auteur&action=ajout&stage=3&dossier='.$dossier->getId()),
							"DOSSIER_ID" => $dossier->getID()
						));
						break;
					case 2 :
						//On affiche le deuxième formulaire :
						$this->tpl_name = 'dossiers/ajout2';

						//Bon est ce qu'on est là parce que boulet ou pour ajouter un nouveau post ?
						if(empty($erreurs)) {
							//On est là parce qu'un stupide a fait des erreurs, consolation : il va se 								//faire insulter au rechargement de la page, mouhahaha !
							//Du coup on lui redonne ses informations, c'est user friendly !
							if(!empty($infos_dossier['forms'][2])) {
								$template->assign_vars(array(
									'POSTID' => $infos_dossier['forms'][2]['post_id'],
									'TEXTE' => $infos_dossier['forms'][2]['post_text']
								));
							}
						} else {
							//On est là parce qu'on met un nouveau post, donc pas d'info à renvoyer !
						}

						//Le lien vers lequel pointera le formulaire ;
						$template->assign_vars(array(
							"LINK"	=> append_sid('index.php?i=dossiers&mode=ajout&action=ajout&stage=2'),
							"DOSSIER_ID" => $dossier->getID()
						));
						break;
					default :
					case 1 :
						//On affiche le premier formulaire :
						$this->tpl_name = 'dossiers/ajout1';

						//Quelles sont les différentes catégories ?
						$cats = "SELECT id_cat, titre, level
							FROM ".CATEGORIES_TABLE."
							ORDER BY left_id";
						
						$result = $db->sql_query($cats);
						while($cat = $db->sql_fetchrow($result)) {
							//On met en place le nombre d'espaces pour le titre dans le menu déroulant:
							$titre = $cat['titre'];
							for($i = 0; $i < $cat['level']; $i++) {
								$titre= "&nbsp;&nbsp;&nbsp;".$titre;
							}

							//Et là on envoie au template :
							$template->assign_block_vars('categories', array(
								'CAT_ID' => $cat['id_cat'],
								'TITRE' => $titre
							));
						}

						//On programme propre, donc on nettoie derrière nous :
						$db->sql_freeresult($result);

						//Si on était déjà là alors on renvoit les informations déjà entrées :
						if(!empty($user->data['forms'][1])) {
							$template->assign_vars(array(
								'TITRE' => $infos_dossier['forms'][1]['titre'],
								'CHAPEAU' => $infos_dossiera['forms'][1]['chapeau'],
								'CATEGORIE' => $infos_dossier['forms'][1]['categorie']
							));
						}

						//Le lien vers lequel pointera le formulaire ;
						$template->assign_vars(array("LINK"=> append_sid('index.php?i=dossiers&mode=ajout&action=ajout&stage=1')));
						//A noter que l'utilité ici n'est pas énorme mais ça permet de changer 							//facilement le lien sans avooir à vider le cache, c'est tout :D
						break;
				}

				//On envoie les erreurs relevées si erreurs il y a :
				if(!empty($erreurs)) {
					foreach ($erreurs as  $erreur_msg)
					{
						//Cette méthode permet de faire varier sans soucis le nombre d'erreurs afin de 							// guider au mieux le rédacteur du dossier
					    $template->assign_block_vars('erreurs', array(
						'ERREUR_MSG'  => $erreur_msg,
					    ));
					}
				}
				break;
			case "categories" :
				$this->tpl_name = 'news/dmi_cats';

				break;
			case "ajout_auteur" :
				$this->tpl_name = 'dossiers/ajout_auteur';

				//Pour récupérer la liste des auteurs on récupère les infos du dossier :
				$dossier = new Dossier($_GET['dossier']);

				//Et on envoie la liste des auteurs :
				$auteurs = $dossier->getAuteurs();
				foreach($auteurs as $data) {
					$template->assign_block_vars('auteurs', array(
						'AUTEUR_ID' => $data['user_id'],
						'AUTEUR_NAME' => $data['username']
					));
				}

				//Si jamais on a une information à afficher, on l'affiche :
				if(!empty($infos_membre)) {
					foreach ($infos_membre as  $info_msg)
					{
						//Cette méthode permet de confirmer les actions
						$template->assign_block_vars('infos_membre', array(
							'INFO_MSG'  => $info_msg,
						));
					}
				}

				//On envoie les erreurs relevées si erreurs il y a :
				if(!empty($erreurs)) {
					foreach ($erreurs as  $erreur_msg)
					{
						//Cette méthode permet de faire varier sans soucis le nombre d'erreurs afin de 							// guider au mieux le rédacteur du dossier
					    $template->assign_block_vars('erreurs', array(
						'ERREUR_MSG'  => $erreur_msg,
					    ));
					}
				}

				//Informations complémentaires pour le template :
				$template->assign_vars(array(
					"LINK"	=> append_sid('index.php?i=dossiers&mode=ajout_auteur&action=ajout_auteur&dossier='.$dossier->getID()),
					"DOSSIER_ID" => $dossier->getID()
				));
				break;
			case "voir" :
			default :
				$this->tpl_name = 'dossiers/accueil';
				//On sélectionne les dossiers :
				$sql = "SELECT d.dossier_id
					FROM ".DOSSIERS_TABLE." d
					ORDER BY d.dossier_creation_date DESC";
				$result = $db->sql_query($sql);
				//Chaque dossier est ajouté au template :
				while($data = $db->sql_fetchrow($result)) {
					$dossier = new Dossier($data['dossier_id']);
					$template->assign_block_vars('dossiers', array(
						'DOSSIER_ID'		=> $dossier->getId(),
						'DOSSIER_TITRE'		=> $dossier->getTitre(),
						'DOSSIER_CHAPEAU'	=> $dossier->getChapeau(),
						'DOSSIER_DATE'		=> $dossier->getCreateDate(),
						'DOSSIER_LOGO'		=> $dossier->getCategorie()->getLogo()
					));
				}

				//On nettoie : 
				$db->sql_freeresult($result);
				break;
		}
		
	}
}

?>